/*-------------------- Program.cs ------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Practica_Sobrecarga
{
    class Program
    {
        static void Main(string[] args)
        {
            // Varilables
            Centimetro centimetros = new Centimetro(10);
            Metro metros = new Metro(10);

            // Operaciones
            Centimetro sumaCentimetro = centimetros + metros;
            Metro sumaMetro = metros + centimetros;

            // Salida
            Console.WriteLine("La suma de {0} centimetros"+
                        " y {1} metros"+
                        ", es {2} centimetros", 
                        (double)centimetros, 
                        (double)metros, 
                        (double)sumaCentimetro);
            
            Console.WriteLine("La suma de {0} centimetros" +
                        " y {1} metros" +
                        ", es {2} metros",
                        (double)centimetros,
                        (double)metros,
                        (float)sumaCentimetro); 
            Console.ReadLine();
        }
    }
}
/*-------------------- Centimetro.cs ------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Practica_Sobrecarga
{
    class Centimetro
    {
        // Atributos
        public double cantidad;

        // Constructores
        public Centimetro(){this.cantidad = 0;}
        public Centimetro(double cantidad){this.cantidad = cantidad;}

        // Sobrecargas operadores
        public static Centimetro operator + (Centimetro centimetro, Metro metro)
        {
            Centimetro valorRetorno = new Centimetro();
            valorRetorno = centimetro.cantidad + (metro.cantidad * 100);
            return valorRetorno;
        }
        // Conversiones
        public static implicit operator Centimetro(double cantidad) {
            Centimetro valorRetorno = new Centimetro(cantidad);
            return valorRetorno;
        }
        public static implicit operator double(Centimetro centimetro) {
            return centimetro.cantidad;
        }

    }
}
/*-------------------- Metro.cs ------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Practica_Sobrecarga
{
    class Metro
    {
        // Atributos
        public double cantidad;

        // Constructores
        public Metro(){this.cantidad = 0;}
        public Metro(double cantidad){this.cantidad = cantidad;}

        // Metodos
        public static Metro operator +(Metro metros, Centimetro centimetros) {
            Metro valorRetorno = new Metro();
            valorRetorno = metros.cantidad + centimetros.cantidad /100;
            return valorRetorno;
        }
        // sobrecargas
        public static implicit operator Metro(double cantidad){
            Metro valorRetorno = new Metro(cantidad);
            return valorRetorno;
        }
        public static implicit operator double(Metro metro){
            return metro.cantidad;
        }
    }
}
